0 - Applications de la reconnaissance par l'iris
1 - Synthèse du travail effectué et état de l'avancement du projet
1-0) Rappel du principe de l'identification par
l'iris
1-1) Description de la partie logicielle Matlab
1-1-1) Les routines
1-1-2) Description des routines
1-1-3) Conclusions
1-2) Organigramme et fonctionnalités
1-2-1) Organigramme
1-2-2) Inventaire des fonctions spécifiques et courantes utilisées
1-3) Contenu théorique
1-3-1) Transformation polaire-rectangulaire
1-3-2) Filtrage moyenneur
1-3-3) Applications de la théorie des ondelettes
1-3-4) Filtrage pyramidal
1-4) Ouverture sur le projet de troisième année : CAHIER DES
CHARGES
2 - Acquisition de l'image
2-1) Description de la carte Rio
2-2) Configuration de la carte
2-3) Optique
2-3-1) Choix de l'optique
2-3-2) Elaboration d'un protocole de prise de vue : essais et
résultats
2-4) Reconnaissance de forme de l'iris
2-4-1) But
2-4-2) Principe
2-4-3) Résultats
3 - Remaniements du code et compilation
3-1) Recherche d'un compilateur pour la génération d'une
application "Stand Alone"
3-2) Remaniement de l'organigramme
3-3) Interface
3-4) Optimisation du code
4 - Avancement du
projet
En
premier lieu, le système de reconnaissance de l'iris permet d'effectuer
une identification sûre et rapide d'une personne. En conséquence, ce
dispositif trouvera des applications dans tous les domaines mettant en
application des systèmes de sécurité. En intégrant par exemple ce dispositif de
reconnaissance dans des sas, notre système pourrait s'appliquer dans les
secteurs suivants :
1-0) Rappel du principe de
l'identification par l'iris
L'identification par l'iris va être réalisée par comparaison précise entre une image de test : celle de l'individu à identifier, et toutes les images d'une base de données pré-établie : celles avec lesquelles l'individu testé doit être rapproché.
Cette identification ne peut donc être parfaite dans le sens où l'on ne dispose jamais de deux images identiques: d'une comparaison entre images ne pourra donc résulter qu'un classement par ordre de "ressemblance". La décision d'identification se tournera vers l'image de la base de données reconnue étant la plus proche en termes d'information de l'image de test.
Nous devons considérer dans notre application les plus infimes détails d'une image d'iris, sachant que celui possède une centaine de degrés de liberté, ce qui assure l'indépendance statistique des données. L'information qui est contenue dans l'oeil n'est pas une information qui dépend du génotype mais du phénotype, ainsi même deux jumeaux n'auront pas le même iris et cela permettra de les différencier. Il s'agit de révéler cette quantité d'information de la façon la plus adaptée, ce qui constitue la chaîne de traitement de l'image.
1-1) Description
de la partie logicielle
1-1-1) Les routines
Nous avons récupéré un ensemble de routines écrites sous Matlab, ordonnées de la façon suivante, pour établir une chaîne complète de traitement d'une image d'iris. Elles sont au nombre de 6 et ont pour noms respectifs :
1-1-2) Description des
routines
ADD_EYE :
Cette routine a pour but de
charger une image selon l'organisation de LOAD_IMAGE, de demander à
l'utilisateur les 5 paramètres des ellipses caractéristiques grâce à l'image de
l'iris affichée, d'enregistrer l'image chargée et ses paramètres, si elle est
nouvelle, dans la base de données.
Sont effectuées alors une
série d'opérations sur l'image chargée : filtrage moyenneur, transformation
polaire - rectangulaire, filtrage pyramidal, qui adaptent l'image de la manière
la plus adéquate à une comparaison ultérieure et dont on voit les résultats
successifs grâce à des graphiques.
LOAD_IMAGE :
Cette routine a pour but de
charger une image à partir du répertoire qui la contient, que l'utilisateur doit
saisir au préalable.
Le résultat de cette recherche se solde par le renvoi
d'une structure d'information relative à l'image chargée et par la création
d'une matrice STRIP1 résultat de la lecture de l'image suivant son format.
GEN_STRIP1 :
Cette routine a pour but de
charger une image selon l'organisation de LOAD_IMAGE, et de demander à
l'utilisateur d'ajuster les 5 paramètres des ellipses caractéristiques grâce à
l'image de l'iris affichée.
Une
fois la saisie jugée correcte, la partie utile de l'iris délimitée par les 2
ellipses intérieures et extérieures est convertie par une transformation polaire
- rectangulaire en une bande . Une transformée de Fourier bidimensionnelle est
effectuée sur cette bande. Sont associées à chacun de ces traitements une
visualisation de leur résultat.
EXPAND_CR :
Cette routine permet d'ajouter à
la table de corrélation entre images une nouvelle image, qui est comparée à
toutes les autres pour les différentes orientations possibles et dont les
résultats sont ensuite stockés dans cette même table.
INTERPRET_CR :
Cette routine a pour but
l'affichage complet du contenu de la table de corrélation entre images, en
donnant un classement par ordre décroissant du résultat de la comparaison entre
une image choisie par l'utilisateur dans cette table et le reste de la table.
DISP_CR :
Cette routine donne la
possibilité d'afficher le contenu de la table de corrélation entre les images de
la base de données et
l'image en cours de comparaison, pour une orientation
choisie par l'utilisateur.
Nous
avons agrémenté chaque fichier source correspondant de commentaires détaillés
auxquels il est nécessaire de se reporter pour plus de précision.
1-1-3) Conclusions
Les routines décrites précédemment sont modulaires, chacune exécutant une partie indépendante de la chaîne d'identification. On peut donc grâce à elles isoler les fonctionnalités-clés de cette chaîne:
1-2) Schémas fonctionnels et fonctionnalités
1-2-1) schémas fonctionnels des routines en termes de fonctions .m
spécifiques
Deux routines seulement font
appel à des fonctions spécifiques, héritées de Toolboxes disponibles sur le site
de Mathworks : ADD_EYE et EXPAND_CR.
ADD_EYE :
La première partie concerne le filtrage moyenneur : fonction MEDFILT2 dont l'arborescence est décrite ci-dessus.
La seconde concerne le filtrage pyramidal : construction de la pyramide, qui contient le résultat de l'analyse multi-résolution.
Cette partie concerne l'affichage du résultat de l'analyse multi-résolution
: une série d'images de dimensions successivement réduites.
Cette dernière partie de ADD_EYE crée le Strip, qui est la transformée des
images précédentes.
EXPAND_CR :
EXPAND_CR
ne fait appel qu'à CORR2 qui fait office de corrélation en deux dimensions pour
la comparaison d'images entre elles.
1-2-2) Inventaire des fonctions spécifiques et courantes
On peut recenser les fonctions matlab appelées dans les routines récupérées afin de comparer les méthodes de translation du code pour le passage à une application "Stand alone".
Fonctions spécifiques :
Filtrage moyenneur : medfilt2, bestblk,
colfilt, im2col, isind, col2im, imresize
Transformation
polaire-rectangulaire : pol2rec2
Filtrage
pyramidal : buildspyr, showspyr, spyrband, maxpyrht, corrdn,
buildspyrlevs, rconv2, factorial, pointop, ifftshift, range2, var2, mean2,
spyrnumbands, spyrht, spyrhigh, pyrlow, pyrband, pyrbandindices, pixelaxes,
corr2
Interfaces :
disp, input, get, nargin,
nargchk, error, warning, clear, clc, clf ...
Matrices :
any, all, isempty, zeros,
ones, prod, size ...
Algébriques :
min, max, floor, ceil,
abs, mean, prod, sum, cos, sqrt ...
Graphiques :
plot, subplot, image,
figure, title, set, colormap, gray, axis, drawnow ...
Chaines de caractères :
length,
num2str, int2str, strcat, strcmp, isstr...
Opérations fichiers :
cd, save, load,
uigetfile, close ...
Variables :
isa, double, uint8, isreal
...
Autres :
class, imfinfo, imread, exist,
fcall, lower, eval, rem, reshape, deblank, fft2, ifft2, conv2, repmat, interp1,
fprintf, sprintf, filt ...
Il apparaît donc environ une centaine de fonctions matlab récurrentes, qu'on peut classer en plusieurs catégories :
1-3) Contenu théorique
1-3-1) Transformation polaire - rectangulaire
Lorsque la
partie utile de l'iris peut être sélectionnée au moyen de 2 ellipses : l'une
délimitant l'iris et le blanc de l'oeil, l'autre délimitant l'iris et la
pupille, il reste la zone utile comprise entre ces 2 ellipses extérieure et
intérieure.
La
meilleure façon de profiter de cette sélection est tout d'abord la suppression
de l'information non-utile et ensuite la remise en forme matricielle de
l'information utile.
Laissée
telle quelle, l'information utile serait d'une part dépendante de la
localisation de l'iris sur l'image de test, et d'autre part mobiliserait une
matrice de pixels trop importante pour le nombre de pixels utiles.
D'où
l'intuition immédiate d'opérer une transformation polaire rectangulaire, de
transformer une "couronne" en une "bande".
1-3-2) Filtrage moyenneur
Des essais
ont été réalisés sur les images d'iris, afin de constater quelles parties du
spectre fréquentiel étaient privilégiées, et d'en tirer les conclusions
nécessaires à une éventuelle compression de données, soit la décision de ne pas
prendre en compte une ou certaines régions du spectre jugées trop peu
significatives en regard des autres régions de ce spectre représentées dans
l'image.
Une simple FFT bidimensionnelle est effectuée sur la matrice bande récupérée de
la transformation précédente
Transformée de Fourier bidimensionnelle de l'iris après
transformation polaire rectangulaire
Il en
résulte que l'information se concentrait dans le domaine des hautes fréquences,
du moins à partir du résultat de la fft. Il subsistait un doute quant aux bruits
éventuels issus du capteur, qu'on sait présents dans les hautes fréquences, et
donc capables de fausser la conclusion précédente.
L'essai
d'annulation des hautes fréquences par filtrage donne une image floue et
inexploitable, tandis qu'un essai d'annulation des basses fréquences n'entraîne
aucune dégradation remarquable de l'image jusqu'à environ 60% des coefficients
des basses fréquences.
A été
testé un filtre coupe-bande centré en bande moyenne
dont le résultat est présenté ci-dessous :
FFT de l'image avant filtrage
FFT de l'image après filtrage
Les
fréquences basses sont très peu présentes, il en résulte donc que le filtre
coupe-bande centré en bande moyenne est équivalent à un filtre passe-bas. Le
filtre choisi a été exhibé de la fonction "MEDFILT2",
qui effectue un filtrage moyenneur par convolution avec l'image source en
optimisant le traitement matriciel ( détermination des blocs optimaux,
traitement par colonnes, ... )
1-3-3) Application de la théorie des ondelettes
L'ondelette est donc née de la recherche d'une décomposition en signaux portant les deux informations fréquentielles et temporelles. Une ondelette est finalement une fonction élémentaire dont on fait varier la localisation temporelle ( translation ) ainsi que la taille ( dilatation ) tout en gardant leur forme constante : la dilatation s'accompagne d'une variation de la vitesse des oscillations donc de la fréquence. Par suite, de la même manière que dans la transformée de Fourier, un signal s'écrit sous la forme d'une superposition de telles ondelettes décalées et dilatées. Ces dernières s'adaptent d'elles mêmes à la taille des caractéristiques qu'elles recherchent : elles sont très étendues pour étudier les basses fréquences et très fines pour étudier les hautes fréquences. Ceci porte le nom d'analyse multi-résolution.
La transformée en ondelettes se définit par l'expression :
dans laquelle
les deux arguments u et s sont respectivement le facteur de translation et de
dilatation et l'atome de base phi est une fonction de moyenne nulle,
centrée au voisinage de 0 et d'énergie finie.
Illustration théorique de l'analyse multi-résolution
1-3-4) Filtrage pyramidal
Ce schéma correspond
aux itérations de filtrage opérées sur le signal origine x[n] : les Dx d'ordre i
correspondent aux coefficients en ondelettes ( résultats de G(z) passe-bas ) et
Ax est le résidu, "reste" d'information qu'on ne filtre plus.
Schéma de principe de filtrage
L'image
initiale est d'abord filtrée par Ho (passe-haut) et Lo (passe-bas). Le résultat
en sortie de Ho correspond aux coefficients de la décomposition à l'échelle 1 et
la sortie de Lo représente le résidu à la même échelle. Les résultats suivants
sont obtenus de manière identique avec (K+1) filtres ( Bo à Bk ) orientés à
chaque échelle successive : les coefficients en sortie des Bin sont les
décompositions orientées à l'échelle n.

image source Exemple de décomposition orientée
Remarque : le caractère intuitif du filtrage orienté est ici
illustré : le résultat du filtrage peut se ramener à une "vue" de l'image source
éclairée par une lumière rasante orientée diagonalement, verticalement,
horizontalement, ce qui donne 4 décompositions.
Une
décomposition orientable peut donc se définir comme une décomposition
multi-orientation ( caractère orienté des filtres ) et multi-résolution (
plusieurs échelles dans la décomposition ) : cette
décomposition s'apparente à la transformée en ondelettes.
Il ne reste qu'à choisir l'orientation optimale des filtre orientés pour avoir une représentation fréquentielle de l'iris possédant la meilleure résolution. Exemple ci dessous sur une FFT d'image.
image
source
décompositions orientées
Remarque : c'est l'orientation horizontale (en
haut à droite) qui porte le plus d'informations. Intuitivement encore, la FFT de
l'image est décrite par des "raies" verticales : il apparaît donc logique d'
"éclairer" cette FFT horizontalement, pour accentuer les "reliefs".
| On donne un nom à cette décomposition récursive, se composant d'opérations de filtrages passe-bas et passe-haut orientées, celui de filtrage pyramidal, en raison de la représentation pyramidale formée par les images successives résultant de ces opérations (voir ci-dessus). |
1-4) Ouverture sur le travail de troisième année :
CAHIERS DES CHARGES
Nous disposons
à l'aune de cette troisième année du travail effectué dans le projet de
reconnaissance par l'iris l'année précédente par un trinôme de seconde année.
Nous
avons récupéré une série de routines codées sous Matlab, soit des fonctions
précompilées à usage de simulation.
Le but de
la récupération de cet ensemble est l'implémentation logicielle de l'application
globale de reconnaissance par l'iris, et en cela la réalisation d'un logiciel
autonome, indépendant de l'environnement d'utilisation.
CAHIER DES CHARGES
Objectifs :
Le but premier de ce projet est l'implémentation d'un algorithme de biométrie de l'iris humain, ceci afin de réaliser un appareil qui identifie nommément l'individu grâce aux informations que contient son iris.
Mise en oeuvre :
On distingue 3 parties
|
Acquisition :
L'acquisition est à réaliser avec une caméra de marque Optovision en noir et
blanc.
Il
reste à déterminer les performances de la chaîne d'acquisition :
Caméra :
* du
point de vue fréquentiel
* le
niveau de précision du capteur ( 8, 10, 12 bits ou plus par pixel)
* la
densité du capteur ( sa résolution )
Objectif :
* sa
focale
*
sa sensibilité à l'intensité lumineuse ( ouverture )
* sa
distance de mise au point
* sa
qualité de fabrication et l'adaptation mécanique ( standards C, Cs, Board... )
Eclairage :
*
configuration de ou des sources lumineuses
* son
intensité
* configuration des filtres optiques anti-reflets éventuels
Il est important de ne pas négliger toutes les imperfections conjuguées lors de la prise de vue de l'oeil : position, reflets, taille de l'iris dans l'image ...
Traitement :
Le code existant doit avoir une exécution plus fluide et plus rapide. Et ceci par l'emploi d'une ou plusieurs méthodes parmi :
Présentation :
Plusieurs images sont à afficher :
Nous
donnons tout d'abord un bref aperçu de l'architecture de la carte RIO.
Pour la
carte RIO la plus simple, nous ne disposons que du module d'entrée 0, ce qui
limitera notre choix pour la configuration de la carte. Il en est de même pour
le choix du format d'entrée des images, seul le mode RIO_BW est disponible et
non pas le mode noir et blanc de haute qualité.
Deux
scalers sont connectés aux modules d'entrée: le scaler haute performance ou HPS
et le binary ratio scaler. Ils sont eux même connectés au contrôleur DMA, qui
assure le lien avec le bus PCI.
Elle dispose de contrôleur de bus PCI de troisième génération. Les bus PCI ont été disponible sur le marché depuis un certain temps mais ils n'était pas dédié au traitement d'images en temps réel. Ici, il y a possibilité d'avoir des accès en écriture en mémoire vidéo depuis un bus externe de bande passante de 45 MB/s. La carte RIO a un contrôleur DMA de bus PCI, qui permet des transferts en mode rafale jusqu'à 132 MB/s combiné à un contrôleur de transfert très souple. Il évite l'intervention de la CPU et son engorgement.
L'interface PCI permet d'avoir de l'adressage en mémoire virtuelle pour des systèmes comme Windows. L'unité de gestion de la mémoire ou MMU traduit des adresses linéaires en adresses physiques en utilisant une table dans la mémoire système. La MMU supporte plus de 4Mbytes d'espace d'adresses virtuelles par canal DMA.
Nous pouvons relier plusieurs caméra couleurs ou noir et blanc à la carte mais pour notre part nous n'en utiliserons qu'une seule caméra noir et blanc. Les standards CCIR, EIA sont admis par la carte.
Aperçu des connexions de la carte RIO
2-2) Configuration de la carte
La carte
RIO met à disposition de l'utilisateur différentes routines en C/C++ qui
permettent sa configuration. Nous allons utiliser la configuration RIO_BW car
nous travaillons en noir et blanc. Dès lors , nous avons à notre crédit trois
différents format de données: RIO_Y1, RIO_Y2, et RIO_Y8. Ces trois formats de
sortie ont les caractéristiques suivantes qui sont indiquées dans le tableau :
Comme nous
avons à coder différents niveaux de gris, car ils représenteront l'information
contenue dans l'image de l'iris, nous ne pouvons pas choisir les deux formats
suivants: RIO_Y1 et RIO_Y2.
En effet
ces deux différents formats sont codés avec un bit par pixel pour le premier et
deux bits par pixel pour le second.
Pour
l'acquisition, nous utilisons un module de capture tel que le flux d'images soit
de 10 images par secondes. Or cette fréquence est
inférieure à la fréquence image utilisée en télévision noir et blanc, donc les
différentes images et les transitions entre deux images seront perceptibles par
l'oeil humain, mais nous devons considérer deux facteurs: l'occupation mémoire
et les capacités physiques de la personne observée.
Nous ne devons pas surcharger la mémoire par nos prises de vues et donc nos fichiers images. Une fréquence d'acquisition supérieure n'aurait pas eu d'intérêt. Ensuite l'utilisateur choisira l'image qui lui paraîtra correspondre le mieux aux critères de fonctionnement des routines de traitement: le moins de reflet possibles, un iris entier, pas de cil ni de paupière sur l'image etc...
Le second critère est plus biologique, c'est pour cela qu'il a été dit qu'il dépendait des capacités physiques de la personne. Il est difficile de rester immobile pendant un temps même restreint pour une personne. En effet, nous sommes constamment en oscillation autour d'une position d'équilibre, ce qui est particulièrement remarquable chez les personnes nerveuses. De plus, un iris va être très sensible à son environnement extérieur, son attention sera facilement capté ce qui se traduira infailliblement par un mouvement du nerf optique donc de l'iris. Même si nous nous concentrons, il ressort qu'il est difficile de conserver une position stable de l' oeil pendant une durée de quelques secondes.
Ainsi, il faut trouver une fréquence image qui respecte ces deux impératifs. De manière expérimentale, nous avons choisi une fréquence de dix images par secondes, étant donné que la durée d'observation est faible.
Maintenant, nous allons détailler les différentes configurations que nous utilisons avec la carte RIO. La taille du format de sortie de l'image dépend du type de caméra utilisée et du type de saisie en mode champ ou mode cadre. Les différents formats sont détaillés dans le tableau suivant :
Le format de sortie choisi est de 768 par 576 car nous travaillons en frame grabbing.
Dans le module RIO_INPUT_MODULE, nous devons choisir l'entrée RIO_IM_0.
Le scaler permet de donner la taille de sortie de l'image, on choisit alors le paramètre RIO_HPS qui détermine un scaler de haute performance.
Le standard vidéo utilisé est le CCIR à 50Hz.
Nous prenons le RIO_VTR. Nous devons indiquer quel type de module de capture nous allons utiliser, c'est à dire ici RIO_FRAME.
Les opérations sur la carte
Initialisation
Différents appels à des fonctions sont réalisés pour prendre en charge l'initialisation de la carte dont voici le détail :
RioSetup : vérifie la présence de la carte et de la connectique
RioOpen : vérifie la présence de la carte et son fonctionnement,
c'est la première fonction qui doit être appelée
pRiodl : réalise
l'allocation mémoire pour les datas de la carte, elle considère le nombre de
cartes RIO et leurs identifiants sur le bus PCI, c'est un pointeur
RioCreateRiodl : est appelée pour l'utilisation de la mémoire allouée,
elle vérifie le pointeur pRiodl
RioModuleSetup : définit les paramètres de
la configuration utilisée
RioSetInputModule : sélectionne un des différents
modes d'entrée ( ici RIO_BW )
RioSelectCamera : permet de sélectionner la
caméra de travail par son identifiant
PaletteSetup : alloue de la RAM pour
l'image et crée la palette
RioMemLock : gère l'allocation DMA, et le blocage
en RAM de la mémoire allouée )
RioScatterLock
Capture
RioCapture : gère le passage de l'image de la carte vers la zone mémoire réservée
Exit
RioMemUnlock : prend en charge la désallocation du DMA et de la RAM
PaletteShutdown : coupe le flux d'images
RioShutdown
RioClose
Déroulement des opérations
1) RETURN ou clic sur le bouton "jumelles" pour lancer les images.
2 )
ESPACE ou clic sur "appareil photo" pour capture et sauvegarde vers C:\iris_pics\aa.bmp
3) RETURN pour interrompre la
prise de vue avant de quitter.
2-3) Optique
2-3-2) Elaboration d'un protocole de prise de vue : essais et résultats
Les essais
réalisés depuis l'année dernière ont montré que la dépendance des résultats
d'identification vis à vis de la prise de vue est grande. Une variation infime
de ses facteurs déterminants peut fortement dégrader l'image de test, soit après
interprétation, les résultats eux-mêmes. Ces facteurs ont été étudiés et il
ressort que l'éclairage est primordial dans la mesure où il implique le ou les
reflets qui altèrent l'information portée par l'iris, et également l'ouverture
de la pupille qui, par contraction ou dilatation, déforme non linéairement
l'iris.
En outre, cette sévère dépendance doit nous obliger à trouver un protocole de prise de vue de l'oeil afin que :
premièrement, l'on puisse assurer des conditions optimales de prise de vue, par
étude cumulée des différents facteurs déterminants, et deuxièmement, l'on puisse
assurer la répétabilité de ces prises de vue pour effectuer une comparaison
d'images, obtenues dans des conditions proches, suffisamment fiable.
Les contraintes qui semblent établies sont :
Pour
l'instant, rien n'est définitif et nous attendons de mieux connaître le nouvel
objectif pour tirer des conclusions et finaliser le protocole de prise de vue.
2-3-1) Choix de l'optique
Après
maintes recherches auprès de constructeurs et de revendeurs spécialistes, nous
avons dû choisir un objectif macrophotographique, c'est à dire capable de capter
des images très proches sans accuser de baisse significative de l'intensité
lumineuse.
Le
principal problème a résidé dans le fait que l'objectif recherché n'était pas
destiné à la photographique classique avec montages classiques à vis ou
baïonnettes ( adaptation avec boîtier d'appareils photographiques ) et
diaphragme pour capteur, mais devait s'adapter à un capteur 1/3, c'est à dire un
capteur de sensibilité très inférieure et surtout à un montage Cs. De ce fait,
les optiques classiques utilisées en photographie ne pouvaient convenir, faute
d'adaptateurs mécaniques.
Notre
choix s'est donc finalement porté sur un objectif qui avait d'abord été
recommandé par Optovision, qui nous a également fourni la caméra. Nous joignons
les caractéristiques de l'objectif.
2-4) Reconnaissance de forme de l'iris
2-4-1) But
L'identification de l'iris est basée sur l'interprétation et la comparaison des
informations entre deux iris d'un même oeil ( gauche ou droite ) appartenant à
deux individus pouvant être la même personne ou non : dans le premier cas, il
doit y avoir authentification, dans le second non.
La
sélection des images d'iris par la carte au travers de la caméra et de
l'objectif peut donner lieu à des différences de taille et d'orientation entre
plusieurs clichés : il est donc nécessaire de rendre l'information utile (
l'iris uniquement ) indépendante des paramètres de l'image. C'est pourquoi il
faut éliminer les informations non utiles voire gênantes : la pupille, le blanc de l'oeil,
peut-être les reflets et les zones de la paupière dans le cas d'empiétement significatif sur l'iris.
Cette
opération permettra donc de rendre le traitement ultérieur plus fiable
car on ne compare que les informations de l'iris seuls significatifs et en outre
de gagner en occupation mémoire lors de la sauvegarde des fichiers image.
2-4-2) Principe
Nous avons
précédemment énoncé les zones d'informations de l'image qui sont à éliminer : la
pupille, le blanc de l'oeil, et éventuellement les reflets : zones de
dégradation absolue de l'information, et les parties de paupière qui empiètent
sur l'iris.
Pour les
deux premières zones, le traitement sera plus simple pour des raisons
géométriques simples : l'iris a toujours la même forme générale : une ellipse,
dont il va falloir justement trouver les paramètres. La pupille et le blanc de
l'oeil peuvent donc être repérés au moyen de deux ellipses : la première,
intérieure à l'iris qui contient la pupille et la seconde, extérieure qui
délimite le blanc de l'oeil.
Cela
paraît simple au vu des 5 paramètres qui la caractérisent : son centre en
abscisses Xo, en ordonnées Yo, son grand rayon A et son petit rayon B, et de
surcroît l'angle I que fait l'ellipse par rapport à l'horizontale.
L'opération de sélection de l'iris se décompose en deux opérations
identiques de recherche d'ellipse : l'iris est ensuite localisé dans une
couronne déformée définie par ces deux ellipses.
Schéma :
Cette
géométrie particulière de l'oeil est un avantage et un inconvénient : l'avantage
est que le contour de délimitation est mémorisable ( 5 paramètres seulement au
lieu d'un ensemble de coordonnées de pixels ) et l'inconvénient est que les
ellipses n'ont pas le même angle de référence, ce qui complique la
transformation polaire rectangulaire.
2-4-3) Résultats
La
recherche des deux ellipses se fait par seuillage, dans la mesure où la pupille
est de couleur quasiment constante et sensiblement plus sombre que l'iris, si ce
dernier est bien éclairé, donc si ses couleurs sont bien visibles et la pupille
suffisamment contractée.
Le
problème apparaît lorsqu'on s'attache à la nature de l'image : un ensemble de
pixels, qui lui confèrent sa caractéristique discrétisée de l'espace.
C'est donc
un ensemble de points qui vont être sélectionnés par seuillage de part et
d'autre de l'ellipse réelle ( dans l'espace analogique ) : nous avons un nuage
de points duquel les paramètres vont être déduits par la technique statistique
des moindres carrés, rudimentaire mais néanmoins efficace.
Illustration et commentaires :
On illustre ici les régions de plus fortes variations (en rouge sombre sur le graphe), soit les zones d'empiétement de la paupière et la zone de reflets mordant sur l'iris et la pupille.
Par
seuillage, on arrive à sélectionner les pixels se trouvant aux frontières de
fort contraste : blanc de l'oeil / iris et iris / pupille.
Le
seuillage n'est pas parfait car il subsiste des zones d' "indécision" sur ces
frontières ; en effet, les transitions lumineuses ne sont pas instantanées dans
l'image, plusieurs pixels sont nécessaires pour traduire ces transitions.
Il y a
également des erreurs de seuillage, par exemple, là où la densité en pixels
sélectionnés est très faible ( intérieur de l'iris, intérieur de la pupille,
extérieur de l'iris ... ) : il ne faut garder que les régions de plus forte
densité. Par exemple, pour la détermination de l'ellipse extérieure, le graphe
suivant illustre le résultat de cette seconde sélection.
Le graphe
ci-dessus illustre la sélection de la région de transition externe (iris / blanc
de l'oeil ), les erreurs de seuillage sont éliminées grâce à une condition de
différence de niveau plus sévère : on obtient bien le nuage de points nécessaire
à la détermination de l'ellipse externe.
Sur ce graphe, sont superposés le nuage de points et le graphe de l'ellipse déterminée par la méthode des moindres carrés. On remarque qu'il suffit de peu de points dans le nuage pour avoir de bons résultats. Les points significatifs se localisent aux deux extrémités des grands rayons.
3-1) Recherche d'un compilateur pour la génération
d'une application "Stand Alone"
Le but du
projet étant de produire une application indépendante de l'environnement
informatique dans une configuration minimale ( mémoire RAM et ROM tout de même
suffisantes ... ), nous devons trouver un moyen pour y parvenir : plusieurs
possibilités ont été énoncées : premièrement, celle de ré-écrire les procédures
Matlab en langage C ou C++, qui est d'emblée écartée pour la masse de travail
que cela représente ( une centaine de fonctions à ré-écrire ), deuxièmement, une
compilation du code Matlab à l'aide d'un cross-compilateur, outil de
développement permettant de "traduire" un code en un autre, en termes de
fonctionnalités et de formats des données.
Le
compilateur proposé est un compilateur édité chez Mathworks. Après analyse des
informations de son fonctionnement, il semble que ce dernier soit apte à
produire une application Stand-Alone, la seule réserve étant l'hypothétique
nécessité de la présence de la version de Matlab associée au compilateur sur la
machine qui accueille l'application.
3-2) Remaniements de l'organigramme
Nous
proposons le nouveau schéma fonctionnel décrivant l'application.
Nous
constatons que le diagramme fonctionnel du processus d'identification par l'iris
ne s'enrichit que d'une branche. A la branche unique d'analyse des images
pré-existantes et stockées préalablement sur le disque dur s'ajoute la branche
d'analyse des images récupérées par la caméra et prises en charge par la carte
Rio.
Les
autres fonctionnalités sont globalement conservées par rapport aux résultats
obtenus l'an passé : nous proposons ici le détail du nouveau schéma fonctionnel
tenant compte de la partie acquisition de l'image ainsi que l'explication du
rôle de chacun des modules présent dans le schéma.
EWS_LOAD est le module principal de prétraitement de l'image et de la détermination des paramètres utiles de l'iris dans cette image. Nous détaillons : PROCESS qui est le module de traitement subdivisé en sous fonctions, FIND_VALUES chargée de déterminer les paramètres de l'ellipse interne, FIND_LAST, de déterminer ceux de l'ellipse externe, ELL2REC chargée d'effectuer la conversion polaire rectangulaire améliorée à cause de la géométrie des ellipses, et IMG_COMPUTE filtre d'extraction des paramètres.
Remarques :
ELL2REC opère la
transformation polaire-rectangulaire. La configuration respective des deux
ellipses fait que nous avons dû changer l'algorithme de transformation. Le
nouvel algorithme opère de manière à décrire la couronne située entre les 2
ellipses selon une géométrie de "diaphragme".
Cette
routine permet de déterminer les paramètres de l'ellipse interne. Elle se
compose de : OPR_COLOR, chargée de sélectionner les
couleurs les plus sombres de façon à localiser la zone iris / pupille, FIND_OBJECTS, chargée d'isoler les objets ou blocs ayant
globalement les mêmes intensités, BW_MORPH, chargée
et TEST_ELL, chargée de déduire les paramètres de
l'ellipse à partir des points de l'objet isolé.
Cette routine est globalement de même fonctionnalité que la précédente mais se
distingue par : IMRESIZE, qui divise par 4 la taille
de l'image, OPR_COLOR utilisée cette fois pour
sélectionner les couleurs les plus claires ( iris / blanc de l'oeil ), DISP_ANGLES, qui cherche à partir du centre de la première
ellipse la distance à laquelle se trouvent le maximum de points n'appartenant
pas à l'ellipse interne et correspondant à la zone de fort contraste (iris
/blanc de l'oeil), BWMAJORITY, chargée de débruiter
l'image traitée, soit d'éliminer les points qui ne font pas partie des objets
qui ont une grande superficie, TEST_ELL, qui déduit
les paramètres de l'ellipse à partir des points isolés.
Cette routine comprend toutes les routines de filtrage pyramidal décrites dans le premier chapitre, qui créent une série d'images en analyse multi-résolution et la convertissent en pyramide : le Strip
3-3) Interface utilisateur
Etant
donnée notre décision d'effectuer une cross-compilation, l'interface
utilisateur, qui devait être initialement réalisée grâce à Visual Basic, est
finalement réalisée à l'aide des bibliothèques Matlab. L'interface sera donc de
même traduite grâce au compilateur. Nous décrivons par la suite les choix faits
pour cette interface.
Aperçu de l'interface :
Commentaires :
L'interface se présente sous la forme d'une fenêtre ouverte, dans laquelle sont disponibles les différentes options de fonctionnement du programme d'identification
3-4) Optimisation du code
Les
calculs de traitement de l'image sont nombreux dans les routines successives et
le but de cette application d'identification par l'iris est de pouvoir décider
de l'authentification d'un individu ou non en temps réel, donc il est absolument
nécessaire d'alléger, quand c'est possible les opérations contenues dans les
routines de traitement, pour gagner en temps de calcul et pouvoir compter sur un
cycle de calcul raisonnable chiffrable en quelques secondes au plus. D'autre
part, il n'est pas négligeable d'alléger les routines en taille lorsqu'il est
possible de simplifier ces dernières et de les adapter à notre
application.
Les améliorations se sont portées essentiellement sur les fonctions récupérées
chez Mathworks, qui ont la caractéristique d'être polyvalentes et adaptables à
différentes situations d'emploi. Notre application n'utilise les fonctions
BUILSPYR, SHOWSPYR, SPYRBAND, et MEDFILT2 que dans un cas donné : nous pouvons
donc gagner en taille sur toutes les procédures de vérifications d'arguments
d'entrée validant les configurations d'utilisation de ces fonctions.
ex : BUILDSPYR :
Nous
nous porterons à l'avenir sur la recherche d'outils de traitement plus fiables,
donnant de meilleurs résultats d'interprétation et éventuellement plus rapide,
notamment une méthode de comparaison autre que la corrélation, de façon à
assurer des distances plus grandes entre individus non authentifiés et minimiser
la probabilité d'erreur.